package com.ruoyi.campus.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.campus.domain.SchoolInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 学校信息Mapper接口
 * 
 * @author campus-alarm
 * @date 2024-01-01
 */
@Mapper
public interface SchoolInfoMapper extends BaseMapper<SchoolInfo>
{
    /**
     * 查询学校信息列表
     * 
     * @param schoolInfo 学校信息
     * @return 学校信息集合
     */
    List<SchoolInfo> selectSchoolInfoList(SchoolInfo schoolInfo);

    /**
     * 查询学校信息详情（包含统计数据）
     * 
     * @param schoolId 学校主键
     * @return 学校信息
     */
    SchoolInfo selectSchoolInfoWithStatistics(@Param("schoolId") Long schoolId);

    /**
     * 根据学校编码查询学校信息
     * 
     * @param schoolCode 学校编码
     * @return 学校信息
     */
    SchoolInfo selectSchoolInfoByCode(@Param("schoolCode") String schoolCode);

    /**
     * 根据用户ID查询用户所属学校
     * 
     * @param userId 用户ID
     * @return 学校信息
     */
    SchoolInfo selectSchoolInfoByUserId(@Param("userId") Long userId);

    /**
     * 查询启用状态的学校列表
     * 
     * @return 学校信息集合
     */
    List<SchoolInfo> selectActiveSchoolList();

    /**
     * 根据地理位置查询附近的学校
     * 
     * @param latitude 纬度
     * @param longitude 经度
     * @param distance 距离（公里）
     * @return 学校信息集合
     */
    List<SchoolInfo> selectSchoolsByLocation(@Param("latitude") Double latitude, 
                                           @Param("longitude") Double longitude, 
                                           @Param("distance") Double distance);

    /**
     * 批量更新学校状态
     * 
     * @param schoolIds 学校ID列表
     * @param status 状态
     * @return 更新数量
     */
    int updateSchoolStatusBatch(@Param("schoolIds") List<Long> schoolIds, @Param("status") Integer status);

    /**
     * 校验学校编码是否唯一
     * 
     * @param schoolCode 学校编码
     * @param schoolId 学校ID（排除自身）
     * @return 数量
     */
    int checkSchoolCodeUnique(@Param("schoolCode") String schoolCode, @Param("schoolId") Long schoolId);
} 